package com.zm.zmgz.utils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: cjw
 * @Date: 2020/04/04/13:16
 * @Description: IO相关工具类
 */
public class IoUtils {

    /***
    * @Description: 获取指定路径中的所有文件
    * @Param:
    * @return:
    * @Author: cjw
    * @Date: 2020-04-04 13:17:44
    */
    public static List<File> getFilesByPaths(String path) {
        File file = new File(path);                 //获取其file对象
        File[] fs = file.listFiles();               //遍历path下的文件和目录，放在File数组中
        List<File> list = new ArrayList();
        for (File f : fs) {                         //遍历File[]数组
            if (!f.isDirectory()) {                 //若非目录(即文件)，则添加
               list.add(f);
            }
        }
        if(list.size()>0) {
            System.out.println(path+"路径中含有"+list.size()+"个文件!");
            return list;
        } else {
            System.out.println(path+"路径中没有文件!");
            return null;
        }
    }


    /***
    * @Description: 重命名文件
    * @Param:
    * @return:
    * @Author: cjw
    * @Date: 2020-04-04 15:29:55
    */
    public static boolean reFileName(final File file, final String newName) {
        // file is null then return false
        if (file == null) return false;
        // file doesn't exist then return false
        if (!file.exists()) return false;
        // the new name is space then return false
        if (Objects.isNull(newName) || newName.equals("")) return false;
        // the new name equals old name then return true
        if (newName.equals(file.getName())) return true;
        File newFile = new File(file.getParent() + File.separator + newName);
        // the new name of file exists then return false
        return !newFile.exists()
                && file.renameTo(newFile);
    }


    /***
     * @Description: 为指定路径下所有文件添加编号前缀;
     * 获取文件数量
     * 遍历文件 获取文件名 去除编号前缀 添加新编号前缀(新文件名) 重命名文件
     * @Param:
     * @return:
     * @Author: cjw
     * @Date: 2020-04-04 15:46:34
     */
    public static void addNoPrefixForFiles(String path) {
        List<File> fileList = IoUtils.getFilesByPaths(path);
        int size = fileList.size();
        if(size == 0) {
            System.out.println(path+"路径下没有文件");
            return;
        }
        int digit = NumberUtils.getDigitByInt(size);
        int i = 1;
        for (File file : fileList) { // 获取文件名 去重编号前缀 添加新编号前缀(新文件名) 重命名文件
            String name = file.getName();
            String s = StringCjwUtils.removeNumericPrefix(name);
            String s1 = StringCjwUtils.zeroPadding(digit, Integer.toString(i));
            String newName = s1 + "-" + s;
            IoUtils.reFileName(file,newName);
            i++;
        }
    }


    /***
     * @Description: 为指定路径下所有文件去除编号前缀;
     *
     * 遍历文件 获取文件名 去除编号前缀(新文件名) 重命名文件
     * @Param:
     * @return:
     * @Author: cjw
     * @Date: 2020-04-04 15:46:34
     */
    public static void deleteNoPrefixForFiles(String path) {
        List<File> fileList = IoUtils.getFilesByPaths(path);
        int size = fileList.size();
        if(size == 0) {
            System.out.println(path+"路径下没有文件");
            return;
        }
        for (File file : fileList) { // 遍历文件 获取文件名 去除编号前缀(新文件名) 重命名文件
            String name = file.getName();
            String newName = StringCjwUtils.removeNumericPrefix(name);
            IoUtils.reFileName(file,newName);
        }
    }

}
